package models

import (
	"github.com/shopspring/decimal"
	"gorm.io/gorm"
	"mojieshi/define"
	"time"
)

type MMember struct {
	ID              int             `gorm:"type:int(11); primaryKey" json:"id"`
	Aid             int             `gorm:"type:int(11);" json:"aid"`                 //商户id
	Wxopenid        string          `gorm:"type:varchar(255);" json:"wxopenid"`       //小程序openid
	Mpopenid        string          `gorm:"type:varchar(255);" json:"mpopenid"`       //公众号openid
	Appopenid       string          `gorm:"type:varchar(255);" json:"appopenid"`      //APP的授权登录openid
	Unionid         string          `gorm:"type:varchar(255);" json:"unionid"`        //开放平台unionid
	Alipayopenid    string          `gorm:"type:varchar(255);" json:"alipayopenid"`   //支付宝小程序openid
	Baiduopenid     string          `gorm:"type:varchar(255);" json:"baiduopenid"`    //百度小程序openid
	Qqopenid        string          `gorm:"type:varchar(255);" json:"qqopenid"`       //qq小程序openid
	Toutiaoopenid   string          `gorm:"type:varchar(255);" json:"toutiaoopenid"`  //头条小城openid
	Iosopenid       string          `gorm:"type:varchar(255);" json:"iosopenid"`      //ios登录openid
	Googleopenid    string          `gorm:"type:varchar(255);" json:"googleopenid"`   //谷歌openid
	Pid             int             `gorm:"type:int(11);" json:"pid"`                 //上级ID
	Levelid         int             `gorm:"type:int(11);" json:"levelid"`             //会员等级ID
	Money           decimal.Decimal `json:"money"`                                    //余额
	Totalcommission decimal.Decimal `json:"totalcommission"`                          //总计获得的佣金
	Commission      decimal.Decimal `json:"commission"`                               //佣金余额
	Score           int             `gorm:"type:int(11);" json:"score"`               //积分
	Nickname        string          `gorm:"type:varchar(255);" json:"nickname"`       //昵称
	Headimg         string          `gorm:"type:varchar(255);" json:"headimg"`        //头像
	Sex             string          `gorm:"type:varchar(255);" json:"sex"`            //性别
	Realname        string          `gorm:"type:varchar(255);" json:"realname"`       //姓名
	Tel             string          `gorm:"type:varchar(255);" json:"tel"`            //手机号
	Pwd             string          `gorm:"type:varchar(255);" json:"pwd"`            //登录密码md5
	Usercard        string          `gorm:"type:varchar(255);" json:"usercard"`       //身份证号
	Weixin          string          `gorm:"type:varchar(255);" json:"weixin"`         //微信号
	Aliaccount      string          `gorm:"type:varchar(255);" json:"aliaccount"`     //支付宝账号
	Aliaccountname  string          `gorm:"type:varchar(255);" json:"aliaccountname"` //支付宝姓名
	Country         string          `gorm:"type:varchar(255);" json:"country"`        //国家
	Province        string          `gorm:"type:varchar(255);" json:"province"`       //省份
	City            string          `gorm:"type:varchar(255);" json:"city"`           //城市
	Area            string          `gorm:"type:varchar(255);" json:"area"`           //区域
	Address         string          `gorm:"type:varchar(255);" json:"address"`        //街道
	Latitude        string          `gorm:"type:varchar(255);" json:"latitude"`       //纬度
	Longitude       string          `gorm:"type:varchar(255);" json:"longitude"`      //经度
	Birthday        string          `gorm:"type:varchar(255);" json:"birthday"`       //生日
	CardId          string          `gorm:"type:varchar(255);" json:"card_id"`        //会员卡ID
	CardCode        string          `gorm:"type:varchar(255);" json:"card_code"`      //会员卡号
	Createtime      int             `gorm:"type:int(11);" json:"createtime"`          //创建时间
	LastVisittime   int             `gorm:"type:int(11);" json:"last_visittime"`      //上次访问时间
	Paypwd          string          `gorm:"type:varchar(255);" json:"paypwd"`         //支付密码
	Platform        string          `gorm:"type:varchar(255);" json:"platform"`       //来源平台 mp公众号 wx小程序
	Subscribe       int             `json:"subscribe"`                                //是否关注
	SubscribeTime   int             `json:"subscribe_time"`                           //关注时间
	Levelstarttime  int             `json:"levelstarttime"`                           //会员等级开始时间
	Levelendtime    int             `json:"levelendtime"`                             //会员等级结束时间
	Checkst         int             `json:"checkst"`                                  //是否已审核
	Checkreason     string          `json:"checkreason"`                              //审核备注
	Isfreeze        int             `json:"isfreeze"`                                 //是否已冻结
	Email           string          `gorm:"type:varchar(255); not null" json:"email"` //邮箱
	Token           string          `json:"token"`                                    //
	CommunitySum    int             `gorm:"type:int(10);" json:"community_sum"`       //下级总数量
	InviteCode      string          `gorm:"type:varchar(255);" json:"invite_code"`    //邀请码
	TodayHuo        int             `json:"today_huo"`                                //今日活跃
	Available       float64         `gorm:"type:int(10);" json:"available"`           //真实余额
	JuanPrice       decimal.Decimal `json:"juan_price"`                               //捐赠金额
	IsJuan          int             `json:"is_juan"`                                  //是否已颁发证书
}

func (table *MMember) TableName() string {
	return "m_member"
}

// 会员等级
type MMemberLevel struct {
	ID                int             `gorm:"type:int(11); primaryKey" json:"id"`
	Aid               int             `gorm:"type:int(11);" json:"aid"`  //
	Sort              int             `gorm:"type:int(11);" json:"sort"` //排序
	Name              string          `json:"name"`                      //等级名称
	Icon              string          `json:"icon"`                      //图片
	Discount          decimal.Decimal `json:"discount"`                  //等级折扣
	Maxnum            int             `json:"maxnum"`                    //人数限制
	CanUp             int             `json:"can_up"`                    //自动升级 0否 1是
	UpConditionShow   int             `json:"up_condition_show"`         //自动升级条件显示 0隐藏 1显示
	UpOrdermoney      decimal.Decimal `json:"up_ordermoney"`             //订单金额满
	UpRechargemoney   decimal.Decimal `json:"up_rechargemoney"`
	CanAgent          int             `json:"can_agent"`   //
	Commission1       decimal.Decimal `json:"commission1"` //
	Commission2       decimal.Decimal `json:"commission2"` //
	Commission3       decimal.Decimal `json:"commission3"` //
	Score1            int             `json:"score1"`      //一级(积分)
	Score2            int             `json:"score2"`      //
	Score3            int             `json:"score3"`      //
	Explain           string          `json:"explain"`     //特权说明
	Createtime        int             `json:"createtime"`  //微信支付金额满
	Yxqdate           int             `json:"yxqdate"`
	Commissiontype    int             `json:"commissiontype"` ////提成方式 0:百分比 1:固定金额
	Scoremax          int             `json:"scoremax"`
	Comwithdraw       int             `json:"comwithdraw"`          //
	UpGiveScore       int             `json:"up_give_score"`        //升级赠送积分
	UpGiveMoney       float64         `json:"up_give_money"`        //升级赠送余额
	UpGiveCommission  decimal.Decimal `json:"up_give_commission"`   //升级赠送佣金
	UpGiveParentMoney decimal.Decimal `json:"up_give_parent_money"` //升级给上级赠送余额
	TongjiYeji        int             `json:"tongji_yeji"`          //
	TongjiYejiProids  string          `json:"tongji_yeji_proids"`   //
	CommissionMax     int             `json:"commission_max"`       //会员等级奖励上限
	SubName           string          `json:"sub_name"`
}

func (table *MMemberLevel) TableName() string {
	return "m_member_level"
}

// 搜索记录
type MSearch struct {
	ID        int    `gorm:"type:int(11); primaryKey" json:"id"`
	Name      string `gorm:"type:varchar(255);" json:"name"` //名称
	Mid       int    `gorm:"type:int(11);"  json:"mid"`
	Aid       int    `json:"aid"`
	CreatedAt int    `gorm:"type:int(10);" json:"created_at"`
	UpdatedAt int    `gorm:"type:int(10);" json:"updated_at"`
}

func (table *MSearch) TableName() string {
	return "m_search"
}

// 热门 搜索
type MHOTSearch struct {
	ID        int    `gorm:"type:int(11); primaryKey" json:"id"`
	Name      string `gorm:"type:varchar(255);" json:"name"` //名称
	Sum       int    `gorm:"type:int(11);"  json:"sum"`      //搜索次数
	Sort      int    `json:"sort"`                           //序号
	Aid       int    `json:"aid"`
	SubName   string `json:"sub_name"`
	CreatedAt int    `gorm:"type:int(10);" json:"created_at"`
	UpdatedAt int    `gorm:"type:int(10);" json:"updated_at"`
}

func (table *MHOTSearch) TableName() string {
	return "m_hot_search"
}

// 微信用户数据
type MUserBind struct {
	ID        int    `gorm:"type:int(10); primaryKey" json:"id"`
	CreatedAt int    `gorm:"type:int(10);" json:"created_at"`
	UpdatedAt int    `gorm:"type:int(10);" json:"updated_at"`
	Type      int    `gorm:"type:int(10);" json:"type"`          //1小程序
	AppType   string `gorm:"type:varchar(255);" json:"app_type"` //小程序类型
	OpenId    string `gorm:"type:varchar(255);" json:"open_id"`  //微信openid
	UserId    int    `gorm:"type:int(10);" json:"user_id"`
	UnionID   string `gorm:"type:varchar(255);" json:"union_id"`   //UnionID
	NickName  string `gorm:"type:varchar(255);" json:"nick_name"`  //微信昵称
	AvatarUrl string `gorm:"type:varchar(255);" json:"avatar_url"` //微信头像
}

func (tavle *MUserBind) TavleName() string {
	return "m_user_bind"
}

// 余额记录
type MMemberMoneylog struct {
	ID         int             `gorm:"type:int(11); primaryKey" json:"id"`
	Aid        int             `gorm:"type:int(11);" json:"aid"` //商户id
	Mid        int             `gorm:"type:int(11);" json:"mid"` //用户id
	Money      decimal.Decimal `json:"money"`                    //金额
	After      decimal.Decimal `json:"after"`                    //增加后余额
	Createtime int             `json:"createtime"`               //时间
	Remark     string          `json:"remark"`                   //备注
	Type       int             `json:"type"`                     //1增加，2减少
}

func (table *MMemberMoneylog) TableName() string {
	return "m_member_moneylog"
}

// 增加余额，返回1成功，返回2失败
func MoneyAdd(tx *gorm.DB, Mid int, Mmoney decimal.Decimal, Aid int, msg string) int {
	//查询用户信息
	var MemData MMember
	err := tx.Model(new(MMember)).Where("id=?", Mid).First(&MemData).Error
	if err != nil {
		return 2
	}
	newmoney := define.AddDecimal(MemData.Money, Mmoney)
	//为用户增加余额
	upData := map[string]interface{}{
		"money": newmoney,
	}
	err = tx.Model(new(MMember)).Where("id=?", Mid).Updates(&upData).Error
	if err != nil {
		return 2
	}
	//写入余额记录
	scoreData := map[string]interface{}{
		"aid":        Aid,
		"mid":        Mid,
		"money":      Mmoney,
		"after":      newmoney,
		"createtime": int(time.Now().Unix()),
		"remark":     msg,
		"type":       1,
	}
	err = tx.Model(new(MMemberMoneylog)).Create(&scoreData).Error
	if err != nil {
		return 2
	}
	return 1
}

// 减少余额，返回1成功，返回2失败
func MoneyEdit(tx *gorm.DB, Mid int, Mmoney decimal.Decimal, Aid int, msg string) int {
	//查询用户信息
	var MemData MMember
	err := tx.Model(new(MMember)).Where("id=?", Mid).First(&MemData).Error
	if err != nil {
		return 2
	}
	newmoney := define.SubDecimal(MemData.Money, Mmoney)
	//为用户增加余额和积分
	upData := map[string]interface{}{
		"money": newmoney,
	}
	err = tx.Model(new(MMember)).Where("id=?", Mid).Updates(&upData).Error
	if err != nil {
		return 2
	}
	//写入积分记录
	scoreData := map[string]interface{}{
		"aid":        Aid,
		"mid":        Mid,
		"money":      Mmoney,
		"after":      newmoney,
		"createtime": int(time.Now().Unix()),
		"remark":     msg,
		"type":       2,
	}
	err = tx.Model(new(MMemberMoneylog)).Create(&scoreData).Error
	if err != nil {
		return 2
	}
	return 1
}
